package com.example.gkb_signalr

import com.google.gson.*
import java.lang.reflect.Type

class GsonUtils {

    companion object {
        //定义并配置gson
        private val gson = GsonBuilder() //建造者模式设置不同的配置
            .serializeNulls() //序列化为null对象
            .setDateFormat("yyyy-MM-dd HH:mm:ss") //设置日期的格式
            .disableHtmlEscaping() //防止对网址乱码 忽略对特殊字符的转换
            .registerTypeAdapter(String::class.java, StringConverter()) //对为null的字段进行转换
            .create()

        /**
         * 对解析数据的形式进行转换
         *
         * @param obj 解析的对象
         * @return 转化结果为json字符串
         */
        fun toJson(obj: Any?): String? {
            return if (obj == null) {
                ""
            } else try {
                gson.toJson(obj)
            } catch (e: Exception) {
                ""
            }
        }
        class StringConverter : JsonSerializer<String?>,
            JsonDeserializer<String> {
            //字符串为null 转换成"",否则为字符串类型
            @Throws(JsonParseException::class)
            override fun deserialize(
                json: JsonElement,
                typeOfT: Type,
                context: JsonDeserializationContext,
            ): String {
                return json.asJsonPrimitive.asString
            }

            override fun serialize(
                src: String?,
                typeOfSrc: Type,
                context: JsonSerializationContext,
            ): JsonElement {
                return if (src == null || src == "null") JsonPrimitive("") else JsonPrimitive(src.toString())
            }
        }

    }


}